# 1、脏读
# 事务A
# 开启事务
begin ;
# 事务B修改后未提交，这里能够读取到 结果为 1,Exx,500
select * from account where id=1;
# 提交
commit ;
# 事务B
begin ;
# update 500
update account set balance=500 where id=1;
commit ;

# 2、不可重复读
# 事务A
# 开启事务
begin ;
# 第一次读取到 1,Exx,200
select * from account where id=1;
# 事务B执行commit之后，再次读取到 结果变成了 1,Exx,500
select * from account where id=1;
# 提交
commit ;
# 事务B
# update 500 然后 commit
update account set balance=500 where id=1;

# 3、可重复读
# 事务A
# 开启事务
begin ;
# 第一次读取到 1,Exx,200
select * from account where id=1;
# 事务B执行commit之后，再次读取到 还是 1,Exx,200
select * from account where id=1;
# 提交
commit ;
# 事务B
# update 500 然后 commit
update account set balance=500 where id=1;


# 4、幻读
# 事务A
# 开启事务
begin ;
# 第一次读取到两行
select * from account;
# 事务B insert 然后 commit 再次读取还是两行
select * from account;
# 提交
commit ;
# 事务B
# insert 然后 commit
insert into account(name, balance) VALUES ('Jxx',300);

# 4、幻读2
# 事务A
# 开启事务
begin ;
# 第一次读取到两行
update account set balance=500 where name='Exx';
# 事务B insert 然后 commit 再次读取还是两行
select * from account;
# 提交
commit ;
# 事务B
# insert 然后 commit
insert into account(name, balance) VALUES ('Exx',200);

# 5、mysql通过mvcc机制解决以下情况的幻读
# 事务A
# 开启事务
begin ;
# 第一次读取到两行
select * from account;
# 事务B insert 然后 commit 再次读取还是两行
select * from account;
# 提交
commit ;
# 事务B
begin;
# insert 然后 commit
insert into account(name, balance) VALUES ('Exx',200);
# 事务B查询三条
select * from account;
commit ;

# 6、mysql通过mvcc机制不能解决以下情况的幻读
# 事务A
# 开启事务
begin ;
# 第一次读取到两行
select * from account;
# 事务B insert 然后 commit 事务A update 事务B插入的数据
update account set balance =300 where name='Jxx';
# 然后重新读取，发现变成了三条
select * from account;
# 提交
commit ;
# 事务B
begin;
# insert 然后 commit
insert into account(name, balance) VALUES ('Jxx',200);
# 事务B查询三条
select * from account;
commit ;
